package utility

import (
	"context"
	"fmt"
	"time"

	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/util/gconv"
)

// 第三方接口响应结构（与接口返回的JSON字段对应）
type ThirdPartyResponse struct {
	Code    int    `json:"code"`    // 状态码
	Message string `json:"message"` // 提示信息
	Data    g.Map  `json:"data"`    // 业务数据（用g.Map灵活接收）
}

// 发送GET请求并解析响应
func PostThirdPartyData(ctx context.Context, url string, params string, token string) (*ThirdPartyResponse, error) {
	// 模拟注册成功
	//var res ThirdPartyResponse
	//res.Code = 200
	//res.Message = "注册成功"
	//res.Data = g.Map{}
	//
	//g.Log().Printf(ctx,
	//	"[PostThirdPartyData-res] url:%s | params:%s | token:%s| res:%s",
	//	url,
	//	params,
	//	token,
	//	res,
	//)

	// 1. 发送请求（g.Client()返回*ghttp.Response）
	headers := make(map[string]string)
	headers["Content-Type"] = "application/json"
	headers["Authorization"] = token
	response, err := g.Client().
		Timeout(5*time.Second).
		Header(headers).
		Post(ctx, url, params)
	if err != nil {
		return nil, fmt.Errorf("请求失败：%v", err)
	}
	defer response.Close() // 必须关闭响应体

	// 2. 检查响应是否正常（先确保response非nil）
	g.Log().Printf(ctx,
		"[PostThirdPartyData-res] url:%s | params:%s | token:%s| res:%s",
		url,
		params,
		token,
		response.ReadAllString(),
	)
	if response.StatusCode != 200 {
		return nil, fmt.Errorf("接口返回异常状态码：%d，响应内容：%s",
			response.StatusCode, response.ReadAllString())
	}

	// 3. 解析JSON响应（使用*ghttp.Response的Unmarshal方法）
	var res ThirdPartyResponse
	if err := gconv.Structs(response, &res); err != nil {
		return nil, fmt.Errorf("解析响应失败，响应内容：%s，错误：%v",
			response.ReadAllString(), err)
	}
	return &res, nil
}
